home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / tbl_change.js < prev    next >
Text File  |  2005-01-06  |  10KB  |  319 lines

  1. /* $Id: tbl_change.js,v 2.17 2005/01/07 11:48:45 nijel Exp $ */
  2.  
  3.  
  4. /**
  5.  * Modify from controls when the "NULL" checkbox is selected
  6.  *
  7.  * @param   string   the MySQL field type
  8.  * @param   string   the urlencoded field name
  9.  * @param   string   the md5 hashed field name
  10.  *
  11.  * @return  boolean  always true
  12.  */
  13. function nullify(theType, urlField, md5Field, multi_edit)
  14. {
  15.     var rowForm = document.forms['insertForm'];
  16.  
  17.     if (typeof(rowForm.elements['funcs' + multi_edit + '[' + urlField + ']']) != 'undefined') {
  18.         rowForm.elements['funcs' + multi_edit + '[' + urlField + ']'].selectedIndex = -1;
  19.     }
  20.  
  21.     // "SET" field , "ENUM" field with more than 20 characters
  22.     // or foreign key field
  23.     if (theType == 1 || theType == 3 || theType == 4) {
  24.         rowForm.elements['field_' + md5Field + multi_edit + '[]'].selectedIndex = -1;
  25.     }
  26.     // Other "ENUM" field
  27.     else if (theType == 2) {
  28.         var elts     = rowForm.elements['field_' + md5Field + multi_edit + '[]'];
  29.         // when there is just one option in ENUM:
  30.         if (elts.checked) {
  31.             elts.checked = false;
  32.         } else {
  33.             var elts_cnt = elts.length;
  34.             for (var i = 0; i < elts_cnt; i++ ) {
  35.                 elts[i].checked = false;
  36.             } // end for
  37.  
  38.         } // end if
  39.     }
  40.     // Other field types
  41.     else /*if (theType == 5)*/ {
  42.         rowForm.elements['fields' + multi_edit + '[' + urlField + ']'].value = '';
  43.     } // end if... else if... else
  44.  
  45.     return true;
  46. } // end of the 'nullify()' function
  47.  
  48.  
  49. /**
  50.  * Unchecks the "NULL" control when a function has been selected or a value
  51.  * entered
  52.  *
  53.  * @param   string   the urlencoded field name
  54.  *
  55.  * @return  boolean  always true
  56.  */
  57. function unNullify(urlField, multi_edit)
  58. {
  59.     var rowForm = document.forms['insertForm'];
  60.  
  61.     if (typeof(rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']']) != 'undefined') {
  62.         rowForm.elements['fields_null[multi_edit][' + multi_edit + '][' + urlField + ']'].checked = false
  63.     } // end if
  64.  
  65.     if (typeof(rowForm.elements['insert_ignore_' + multi_edit]) != 'undefined') {
  66.         rowForm.elements['insert_ignore_' + multi_edit].checked = false
  67.     } // end if
  68.  
  69.     return true;
  70. } // end of the 'unNullify()' function
  71.  
  72. var day;
  73. var month;
  74. var year;
  75. var hour;
  76. var minute;
  77. var second;
  78. var clock_set = 0;
  79.  
  80. /**
  81.  * Opens calendar window.
  82.  *
  83.  * @param   string      calendar.php parameters
  84.  * @param   string      form name
  85.  * @param   string      field name
  86.  * @param   string      edit type - date/timestamp
  87.  */
  88. function openCalendar(params, form, field, type) {
  89.     window.open("./calendar.php?" + params, "calendar", "width=400,height=200,status=yes");
  90.     dateField = eval("document." + form + "." + field);
  91.     dateType = type;
  92. }
  93.  
  94. /**
  95.  * Formats number to two digits.
  96.  *
  97.  * @param   int number to format.
  98.  */
  99. function formatNum2(i, valtype) {
  100.     f = (i < 10 ? '0' : '') + i;
  101.     if (valtype && valtype != '') {
  102.         switch(valtype) {
  103.             case 'month':
  104.                 f = (f > 12 ? 12 : f);
  105.                 break;
  106.  
  107.             case 'day':
  108.                 f = (f > 31 ? 31 : f);
  109.                 break;
  110.  
  111.             case 'hour':
  112.                 f = (f > 24 ? 24 : f);
  113.                 break;
  114.  
  115.             default:
  116.             case 'second':
  117.             case 'minute':
  118.                 f = (f > 59 ? 59 : f);
  119.                 break;
  120.         }
  121.     }
  122.  
  123.     return f;
  124. }
  125.  
  126. /**
  127.  * Formats number to four digits.
  128.  *
  129.  * @param   int number to format.
  130.  */
  131. function formatNum4(i) {
  132.     return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i;
  133. }
  134.  
  135. /**
  136.  * Initializes calendar window.
  137.  */
  138. function initCalendar() {
  139.     if (!year && !month && !day) {
  140.         /* Called for first time */
  141.         if (window.opener.dateField.value) {
  142.             value = window.opener.dateField.value;
  143.             if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
  144.                 if (window.opener.dateType == 'datetime') {
  145.                     parts   = value.split(' ');
  146.                     value   = parts[0];
  147.  
  148.                     if (parts[1]) {
  149.                         time    = parts[1].split(':');
  150.                         hour    = parseInt(time[0],10);
  151.                         minute  = parseInt(time[1],10);
  152.                         second  = parseInt(time[2],10);
  153.                     }
  154.                 }
  155.                 date        = value.split("-");
  156.                 day         = parseInt(date[2],10);
  157.                 month       = parseInt(date[1],10) - 1;
  158.                 year        = parseInt(date[0],10);
  159.             } else {
  160.                 year        = parseInt(value.substr(0,4),10);
  161.                 month       = parseInt(value.substr(4,2),10) - 1;
  162.                 day         = parseInt(value.substr(6,2),10);
  163.                 hour        = parseInt(value.substr(8,2),10);
  164.                 minute      = parseInt(value.substr(10,2),10);
  165.                 second      = parseInt(value.substr(12,2),10);
  166.             }
  167.         }
  168.         if (isNaN(year) || isNaN(month) || isNaN(day) || day == 0) {
  169.             dt      = new Date();
  170.             year    = dt.getFullYear();
  171.             month   = dt.getMonth();
  172.             day     = dt.getDate();
  173.         }
  174.         if (isNaN(hour) || isNaN(minute) || isNaN(second)) {
  175.             dt      = new Date();
  176.             hour    = dt.getHours();
  177.             minute  = dt.getMinutes();
  178.             second  = dt.getSeconds();
  179.         }
  180.     } else {
  181.         /* Moving in calendar */
  182.         if (month > 11) {
  183.             month = 0;
  184.             year++;
  185.         }
  186.         if (month < 0) {
  187.             month = 11;
  188.             year--;
  189.         }
  190.     }
  191.  
  192.     if (document.getElementById) {
  193.         cnt = document.getElementById("calendar_data");
  194.     } else if (document.all) {
  195.         cnt = document.all["calendar_data"];
  196.     }
  197.  
  198.     cnt.innerHTML = "";
  199.  
  200.     str = ""
  201.  
  202.     //heading table
  203.     str += '<table class="calendar"><tr><th width="50%">';
  204.     str += '<form method="NONE" onsubmit="return 0">';
  205.     str += '<a href="javascript:month--; initCalendar();">«</a> ';
  206.     str += '<select id="select_month" name="monthsel" onchange="month = parseInt(document.getElementById(\'select_month\').value); initCalendar();">';
  207.     for (i =0; i < 12; i++) {
  208.         if (i == month) selected = ' selected="selected"';
  209.         else selected = '';
  210.         str += '<option value="' + i + '" ' + selected + '>' + month_names[i] + '</option>';
  211.     }
  212.     str += '</select>';
  213.     str += ' <a href="javascript:month++; initCalendar();">»</a>';
  214.     str += '</form>';
  215.     str += '</th><th width="50%">';
  216.     str += '<form method="NONE" onsubmit="return 0">';
  217.     str += '<a href="javascript:year--; initCalendar();">«</a> ';
  218.     str += '<select id="select_year" name="yearsel" onchange="year = parseInt(document.getElementById(\'select_year\').value); initCalendar();">';
  219.     for (i = year - 25; i < year + 25; i++) {
  220.         if (i == year) selected = ' selected="selected"';
  221.         else selected = '';
  222.         str += '<option value="' + i + '" ' + selected + '>' + i + '</option>';
  223.     }
  224.     str += '</select>';
  225.     str += ' <a href="javascript:year++; initCalendar();">»</a>';
  226.     str += '</form>';
  227.     str += '</th></tr></table>';
  228.  
  229.     str += '<table class="calendar"><tr>';
  230.     for (i = 0; i < 7; i++) {
  231.         str += "<th>" + day_names[i] + "</th>";
  232.     }
  233.     str += "</tr>";
  234.  
  235.     var firstDay = new Date(year, month, 1).getDay();
  236.     var lastDay = new Date(year, month + 1, 0).getDate();
  237.  
  238.     str += "<tr>";
  239.  
  240.     dayInWeek = 0;
  241.     for (i = 0; i < firstDay; i++) {
  242.         str += "<td> </td>";
  243.         dayInWeek++;
  244.     }
  245.     for (i = 1; i <= lastDay; i++) {
  246.         if (dayInWeek == 7) {
  247.             str += "</tr><tr>";
  248.             dayInWeek = 0;
  249.         }
  250.  
  251.         dispmonth = 1 + month;
  252.  
  253.         if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
  254.             actVal = formatNum4(year) + "-" + formatNum2(dispmonth, 'month') + "-" + formatNum2(i, 'day');
  255.         } else {
  256.             actVal = "" + formatNum4(year) + formatNum2(dispmonth, 'month') + formatNum2(i, 'day');
  257.         }
  258.         if (i == day) {
  259.             style = ' class="selected"';
  260.         } else {
  261.             style = '';
  262.         }
  263.         str += "<td" + style + "><a href=\"javascript:returnDate('" + actVal + "');\">" + i + "</a></td>"
  264.         dayInWeek++;
  265.     }
  266.     for (i = dayInWeek; i < 7; i++) {
  267.         str += "<td> </td>";
  268.     }
  269.  
  270.     str += "</tr></table>";
  271.  
  272.     cnt.innerHTML = str;
  273.  
  274.     // Should we handle time also?
  275.     if (window.opener.dateType != 'date' && !clock_set) {
  276.  
  277.         if (document.getElementById) {
  278.             cnt = document.getElementById("clock_data");
  279.         } else if (document.all) {
  280.             cnt = document.all["clock_data"];
  281.         }
  282.  
  283.         str = '';
  284.         str += '<form class="clock">';
  285.         str += '<input id="hour"    type="text" size="2" maxlength="2" onblur="this.value=formatNum2(this.value, \'hour\')" value="' + formatNum2(hour, 'hour') + '" />:';
  286.         str += '<input id="minute"  type="text" size="2" maxlength="2" onblur="this.value=formatNum2(this.value, \'minute\')" value="' + formatNum2(minute, 'minute') + '" />:';
  287.         str += '<input id="second"  type="text" size="2" maxlength="2" onblur="this.value=formatNum2(this.value, \'second\')" value="' + formatNum2(second, 'second') + '" />';
  288.         str += '</form>';
  289.  
  290.         cnt.innerHTML = str;
  291.         clock_set = 1;
  292.     }
  293.  
  294. }
  295.  
  296. /**
  297.  * Returns date from calendar.
  298.  *
  299.  * @param   string     date text
  300.  */
  301. function returnDate(d) {
  302.     txt = d;
  303.     if (window.opener.dateType != 'date') {
  304.         // need to get time
  305.         h = parseInt(document.getElementById('hour').value,10);
  306.         m = parseInt(document.getElementById('minute').value,10);
  307.         s = parseInt(document.getElementById('second').value,10);
  308.         if (window.opener.dateType == 'datetime') {
  309.             txt += ' ' + formatNum2(h, 'hour') + ':' + formatNum2(m, 'minute') + ':' + formatNum2(s, 'second');
  310.         } else {
  311.             // timestamp
  312.             txt += formatNum2(h, 'hour') + formatNum2(m, 'minute') + formatNum2(s, 'second');
  313.         }
  314.     }
  315.  
  316.     window.opener.dateField.value = txt;
  317.     window.close();
  318. }
  319.